package base

/*
* @author: hjz
* @time: 2025/4/26 19:15
* @ 利用[]int计算窗口
 */
//s = "cbaebabacd", p = "abc"
//[0,6]

func findAnagrams(s string, p string) []int {
	if len(s) < len(p) {
		return nil
	}

	pCount := [26]int{}
	window := [26]int{}
	res := make([]int, 0, len(s)>>1)

	// 计算p的字符频率
	for i := 0; i < len(p); i++ {
		pCount[p[i]-'a']++
	}

	// 初始化第一个窗口
	for i := 0; i < len(p); i++ {
		window[s[i]-'a']++
	}

	// 比较第一个窗口
	if window == pCount {
		res = append(res, 0)
	}

	// 滑动窗口
	for r := len(p); r < len(s); r++ {
		// 移除左边界的字符
		l := r - len(p)
		window[s[l]-'a']--

		// 添加右边界的字符
		window[s[r]-'a']++

		// 比较当前窗口
		if window == pCount {
			res = append(res, l+1)
		}
	}

	return res
}
